// 路由导航守卫 文件
import router from '@/router'
import Store from '@/store'
// 进度条的样式(不代表真实的加载进度)
import Nprogress from 'nprogress'
import 'nprogress/nprogress.css'

// 白名单
const writePath = ['/login', '/404']
// 前置守卫
router.beforeEach(async(to, from, next) => {
  // 添加加载条 开始样式
  Nprogress.start()
  // 有token, 如果去的页面是login页则回到首页(如果跳转至首页,则会进入死循环),如果是其他页面正常进入(当有token时,且有用户信息时,正常进入其他页面,如果没有用户信息,则需要获取信息)
  // 无token,如果进入的是不需要登陆的页面白名单 正常进入,如果需要登陆则跳转到登录页
  if (Store.state.user.token) {
    if (to.path.toLowerCase() === '/login') {
      next('/')
    } else {
      if (Store.state.user.userInfo.userId) {
        next()
      } else {
        // 获取用户信息  注意此时的执行机制问题 需要先等待获取信息之后才next()
        await Store.dispatch('user/getUserInfo')
        // 强制使 导航守卫再走一边 (修复addRoutes动态添加路由产生的问题)
        // fullPath 带参数的path地址
        next(to.fullPath)
      }
    }
  } else {
    if (writePath.includes(to.path.toLowerCase())) {
      next()
    } else {
      // 去登陆页后,需要登录后回到之前的页面  携带参数回到登录页
      // next('/login')
      next('/login?redirect=' + to.fullPath)
    }
  }
  // 进度条结束
  Nprogress.done()
})

// 后置守卫 (当从首页进入登录页时,还是会跳转到首页,此时不会经过后置守卫)
router.afterEach(() => {
  // 进度条结束
  Nprogress.done()
})
